package cn.jjxx.modules.map.service;

import java.util.List;
import java.util.Map;

import cn.jjxx.modules.map.entity.ColumnsInfo;
import cn.jjxx.modules.map.entity.RelateInfo;
import cn.jjxx.modules.map.entity.TablesInfo;

public interface ICommonMapService {

	/**
	 * @Description: 获取指定连接的指定数据库的表信息 .<br>
	 * @param dbName 数据库名.<br>
	 * @param tableName 表名.<br>
	 * @param tableComment 表注解.<br>
	 * @return 返回数据库解锁.<br>   
	 * @author 郑成功 .<br>
	 * @date 2018-6-4 上午9:20:26.<br>
	 */
	List<Map<String,Object>> selectDbTables(String dbName,String tableName,String tableComment);
	
	/**
	 * @Description: 获取指定连接的指定数据库的表信息 .<br>
	 * @param dbName 数据库名.<br>
	 * @param tableName 表名.<br>
	 * @param tableComment 表注解.<br>
	 * @return 返回数据库解锁.<br>   
	 * @author 郑成功 .<br>
	 * @date 2018-6-4 上午9:20:26.<br>
	 */
	List<TablesInfo> selectTableList(String dbName,String tableName,String tableComment);
	
	/**
	 * @Description: 获取指定数据库、指定表的所有表结构 .<br>
	 * @param dbName 数据库名.<br>
	 * @param tableName 表名.<br>
	 * @author 郑成功 .<br>
	 * @date 2018-6-4 上午9:24:24.<br>
	 */
	List<Map<String,Object>> selectTableInfos(String dbName,String tableName);
	
	/**
	 * @Description: 获取指定数据库、指定表的所有表结构 .<br>
	 * @param dbName 数据库名.<br>
	 * @param tableName 表名.<br>
	 * @author 郑成功 .<br>
	 * @date 2018-6-4 上午9:24:24.<br>
	 */
	List<ColumnsInfo> selectTableInfoList(String dbName,String tableName);
	
	/**
	 * @Description: 根据指定sql查询相关数据 .<br>
	 * @param sql 指定sql.<br>
	 * @author 郑成功 .<br>
	 * @date 2018-6-4 上午9:27:14.<br>
	 */
	List<Map<String,Object>> selectBySql(String sql);
	
	/**
	 * @Description: 得到外键关联信息集合 .<br>
	 * @param dbName 数据库名.<br>
	 * @param tableName 表名.<br>
	 * @author 郑成功 .<br>
	 * @date 2018-6-4 上午9:27:14.<br>
	 */
	List<Map<String,Object>> selectRelateInfo(String dbName,String tableName);
	
	/**
	 * @Description: 得到外键关联信息集合 .<br>
	 * @param dbName 数据库名.<br>
	 * @param tableName 表名.<br>
	 * @author 郑成功 .<br>
	 * @date 2018-6-4 上午9:27:14.<br>
	 */
	List<RelateInfo> selectRelateList(String dbName,String tableName);
	
	/**
	 * @Description: 检测相关的Id是否被使用 .<br>
	 * @param relateInfos 所有关联表的信息.<br>
	 * @param ids 检测的Id集合.<br>
	 * @author 郑成功 .<br>
	 * @date 2018-6-4 上午10:01:39.<br>
	 */
	Long checkQuoteInfos(List<RelateInfo> relateInfos,List<String> ids); 
	
	/**
	 * @Description: 检测相关的Id是否被使用 .<br>
	 * @param relateInfo 指定关联表的信息.<br>
	 * @param ids 检测的Id集合.<br>
	 * @author 郑成功 .<br>
	 * @date 2018-6-4 上午10:01:39.<br>
	 */
	Long checkQuoteInfo(RelateInfo relateInfo, List<String> ids);
	
	/**
	 * @Description: 检测数据是否被使用，被使用则返回使用信息 .<br>
	 * @param dbName 数据库名.<br>
	 * @param tableName 表名 .<br>
	 * @param bills 关联单据Id .<br>
	 * @author 郑成功 .<br>
	 * @date 2018-6-4 下午5:05:27.<br>
	 */
	String quoteMsg(String dbName,String tableName,List<String> bills);
	
	/**
	 * @Description: 根据sql更新数据 .<br>
	 * @param sql 传入的sql.<br>
	 * @author 郑成功 .<br>
	 * @date 2018-7-26 上午11:09:51.<br>
	 */
	boolean updateBySql(String sql);
	
	/**
	 * @Description: 根据sql新增数据 .<br>
	 * @param sql 传入的sql.<br>
	 * @author 郑成功 .<br>
	 * @date 2018-7-26 上午11:09:51.<br>
	 */
	boolean insertBySql(String sql);
	
	/**
	 * @Description: 根据sql删除数据 .<br>
	 * @param sql 传入的sql.<br>
	 * @author 郑成功 .<br>
	 * @date 2018-7-26 上午11:09:51.<br>
	 */
	boolean deleteBySql(String sql);
	
}
